Many organizations make use of software applications to optimize business operations by analyzing large amounts of data in real time. Such applications need to be extremely efficient, and need to be able to provide analyses on very large relational databases having information stored in tables in a distributed manner on multiple nodes. A node may be a server or a virtual server, and nodes may be connected via a computing bus, a local area network (LAN), a wide area network (WAN), a storage area network (SAN), the Internet, or the like. These nodes may reside in the same location, or they may be stored in remote locations. When an application runs a query on the database, it may need to access data from more than one database table. As a part of running the query, database tables may need to be joined. If the tables to be joined do not reside on the same node, one or more of these tables would need to be sent over the network so that the query can be performed on a single node. The transferring of data between nodes to join tables can be very taxing and can create a bottleneck for the whole procedure, especially for joins requiring large amounts of data to be transferred.